class Funcionario < ActiveRecord::Base

  has_one :dado_pessoal
  has_many :funcionario_projeto
  has_many :funcionario_tarefa

  before_validation :encrypt_password
  attr_accessor :senha
  
  validates :login, :presence => true, :uniqueness => true, :length => {:minimum => 6}
  validates :senha, :length => {:minimum => 4}, :if => :senha_presente
  validates :senha_hash, :presence => true
  validates :senha_salt, :presence => true

  validates_associated :dado_pessoal
  accepts_nested_attributes_for :dado_pessoal

  def senha_presente
    self.senha.present?
  end
  
  def encrypt_password
    if self.senha.present?
      self.senha_salt = BCrypt::Engine.generate_salt
      self.senha_hash = BCrypt::Engine.hash_secret(self.senha, self.senha_salt)
    end
  end

  def self.authenticate(login, senha)
    funcionario = Funcionario.find_by_login(login)
    if funcionario && funcionario.senha_hash == BCrypt::Engine.hash_secret(senha, funcionario.senha_salt)
      funcionario
    else
      nil
    end
  end

  def admin?
    self.admin
  end

end